package xyz.bali16.module.netdisk.service;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import xyz.bali16.module.netdisk.entity.FileFolder;
import xyz.bali16.module.netdisk.entity.FileStorage;
import xyz.bali16.module.netdisk.model.filefolder.FileFolderPageParam;
import xyz.bali16.module.netdisk.model.filestorage.FileStorageAddParam;
import xyz.bali16.module.netdisk.model.filestorage.FileStoragePageParam;
import xyz.bali16.module.netdisk.model.filestorage.FileStorageUpdateParam;

import java.util.List;

public interface FileStorageService extends IService<FileStorage> {

    IPage<FileStorage> getPage(FileStoragePageParam param);

    /**
     * 根据权限id查找用户可用的文件仓库
     * @param fileUserId
     * @return
     */
    List<FileStorage> getFileStoragesByPermission(String fileUserId, Integer PermissionId);

    /**
     * 根据文件用户id获取可用的文件仓库 (感觉不严谨,应该是List 一对多关系)
     * @param fileUserId
     * @return
     */
    List<FileStorage> getAvailableStoragesByFileUserId(String fileUserId);

    /**
     * 根据用户id以及文件仓库id获取用户的文件仓库 (做了鉴权)
     * @param fileUserId
     * @param fileStorageId
     * @return
     */
    FileStorage getFileStorageByFileUserId(String fileUserId,String fileStorageId);

    /**
     * 增加仓库容量
     * @param fileStorageId
     * @param size
     * @return
     */
    Integer addFileStorageSize(String fileStorageId,Integer size);

    /**
     * 减少仓库容量
     * @param fileStorageId
     * @param size
     * @return
     */
    Integer removeFileStorageSize(String fileStorageId,Integer size);

    /**
     * 根据用户idid更新权限，容量
     * 包括permission、currrentSize、maxSize
     * @param fileUserId
     * @param fileStorage
     * @return
     */
    Integer updateUserInformation(String fileUserId,FileStorage fileStorage);

    void add(FileStorageAddParam param) throws Exception;

    void update(FileStorageUpdateParam param) throws Exception;

    void delete(String fileStorageId) throws Exception;
}
